/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package grest.model;
import java.util.List;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;


/**
 *
 * @author rodrigo
 */
public class Mozos implements Entidad{
    
    private int nroMozo;
    private String nombreMozo;
    private String apellidoMozo;
    private boolean changed;
    private boolean prechanged = false;   
    
    
    /**
     * Constructor para objetos de tipo Mozos
     * a partir de un ResultSet
     * @param rs ResultSet proveniente de un query sobre la tabla Mozos
     * @throws java.sql.SQLException
     */
    public Mozos(ResultSet rs) throws SQLException {
        // valores para un nuevo objeto Test
        setNroMozo(rs.getInt("nro_mozo"));
        setNombreMozo(rs.getString("nombre"));
        setApellidoMozo(rs.getString("apellido"));
        setChanged(false);
    }
    
    
    /**
     * Constructor de mozos
     * @param Nro
     * @param nombre
     * @param apellido 
     */
    public Mozos(int Nro,String nombre,String apellido) {
        // valores para un nuevo objeto Test
        setNroMozo(Nro);
        setNombreMozo(nombre);
        setApellidoMozo(apellido);
        setChanged(false);
    }
     /**
     * Constructor de mozos
     */   
    public Mozos()
    {
        this(0,"nulo","nulo");
    }
    
    
    
    /**
     * getter que devuelve el numero de mozo correspondiente
     * @return integer Nro
     */
    public int getNro()
    {
        return nroMozo;
    }
    
    /**
     * getter que devuelve el nombre del mozo correspondiente
     * @return String Nombre
     */
    public String getNombre()
    {
        return nombreMozo;
    }
    
    /**
     * getter que devuelve el apellido del mozo correspondiente
     * @return String apellido 
     */
    public String getApellido()
    {
        return apellidoMozo;
    }
    
    /**
     * setter que permite establecer el numero de mozo a un mozo determinado
     * @param nro 
     */
    public void setNroMozo(int nro)
    {
        this.nroMozo=nro;
        setChanged(true);
        
    }
    
    /**
     * setter que permite establecer el nombre a un mozo determinado
     * @param nombre 
     */
    public void setNombreMozo(String nombre)
    {
        this.nombreMozo=nombre;
        setChanged(true);
    }
    
    public void setApellidoMozo(String apellido)
    {
        this.apellidoMozo=apellido;
        setChanged(true);
    }
    
    /**
     * ver documentacion en clase entidad
     * @return integer
     */
    @Override
    public int getColumnCount(){
        return 3;
        
    }
    
    /**
     * ver documentacion en clase entidad
     * @param c
     * @return class 
     */
    @Override
    public Class getColumnClass(int c)
    {
        switch(c) {
            case 0:
                return Integer.class;
            case 1:
                return String.class;
            case 2:
                return String.class;
        }
        return null;
        
    }
    /**
     * ver documentacion en clase entidad
     * @return boolean 
     */
    
    @Override
    public boolean isChanged()
    {
        return changed;
        
    }
    /**
     * ver documentacion en clase entidad
     */
    @Override
    public void setChanged(boolean f)
    {
     if(!prechanged) changed=f;   
    }
    
    /**
     * ver documentacion en clase entidad
     * @param columna
     * @return boolean 
     */
    @Override
    public boolean isColumnEditable(int col)
    {
        switch(col) {
            case 0:
                return false;
            case 1:
                return true;
            case 2:
                return true;
            
        }
        return false;
    }
    /**
     * ver documentacion en clase entidad
     * @param columna
     * @return String
     */
    @Override
    public String getColumnTitle(int c)
    {
       switch(c) {
            case 0:
                return "nro_mozo";
            case 1:
                return "Nombre";
            case 2:
                return "Apellido"; 
    }
       return null;
    }
    
    
    /**
     * ver documentacion en clase entidad
     * @param tipoEntidad
     * @param fila
     * @param columna
     * @return Objeto de la columna que corresponda 
     */
    @Override
    public Object getColumnValue(List<Entidad> e,int row,int col)
    {
        switch(col) {
            case 0:
                return ((Mozos) e.get(row)).getNro();
            case 1:
                return ((Mozos) e.get(row)).getNombre();
            case 2:
                return ((Mozos) e.get(row)).getApellido();
        }
        return null;
    }
    
    
    
    
    
    /**
     * ver documentacion en clase entidad
     * @param e
     * @param row
     * @param col
     * @param value 
     */
    @Override
    public void setColumnValue(List<Entidad> e,int row,int col,Object value) {
        switch(col) {
            case 0:
                ((Mozos) e.get(row)).setNroMozo((Integer) value);
                break;
            case 1:
                ((Mozos) e.get(row)).setNombreMozo((String) value);
                break;
            case 2:
                ((Mozos) e.get(row)).setApellidoMozo((String) value);
        }
    }
    
    /**
     * ver documentacion en clase entidad
     * @param e
     * @param tuplas 
     */
    @Override
    public void loadTuplas(List<Entidad> e, ResultSet tuplas)
    {
        try {
            e.add(new Mozos(tuplas));
        } catch (SQLException ex) {
            Logger.getLogger(Mozos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * Metodo de Interfase Entidad, ver Entidad para mas info
     */
    @Override
    public String getDeleteQuery() {
        return "delete from t_mozos where nro_mozo = " + getNro();
    }
    
    /**
     * Metodo de Interfase Entidad, ver Entidad para mas info
     */
    @Override
    public String getUpdateQuery()
    {
        return "update t_mozos set nombre = '"+getNombre()+"',apellido = '"+getApellido()+"' where nro_mozo = " + getNro();   
    }
    
    
    /**
     * Metodo de Interfase Entidad, ver Entidad para mas info
     */
    @Override
    public String getInsertQuery()
    {
        return "insert into t_mozos values("+getNro()+",'"+getNombre()+"','"+getApellido()+"')";   
    }

    
    /**
     * consulta que devuelve todos los atributos de la tabla mozos como un string
     * @return String
     */
    @Override
    public String getSelectQuery() {
        return "select * from t_mozos";
    }
    @Override
    public String toString(){
        return this.apellidoMozo + " " + this.nombreMozo;
    }

    @Override
    public void setPreChanged(boolean mod) {
        prechanged=mod;
    }

    @Override
    public boolean isPreChanged() {
        return prechanged;
    }

    @Override
    public String onPreInsertQuery() {
        return "SELECT GEN_ID( GN_T_MOZOS, 1 ) FROM RDB$DATABASE";
    }

    @Override
    public void setID(Object id) {
        this.nroMozo=(Integer)id;
    }
    
}